LinuC-2 - 202試験 - 2.07:ネットワーククライアントの管理 - 2.07.4 OpenLDAPサーバーの設定

Last Update : August 21 2022 17:47:14

     

a. OpenLDAPの概要

LDAP(Lightweight Directory Access Protocol)とは、ユーザーやコンピュータの情報を集中管理する「ディレクトリサービス」へのアクセス時に用いられるプロトコルの一つである。
LDAPを利用することで、LDAPクライアントはLDAPサーバ上のデータを検索、参照したり、追加や削除、変更などの操作を行ったりすることができる。ただし、ディレクトリサービスの性質上、頻繁なデータの変更や複雑な関係を持つデータの管理には向かず、あくまで情報の検索と参照が速いという特性を持つ。

LDAP(Lightweight Directory Access Protocol)は、X.500 というディレクトリサービスプロトコルを Web ブラウザやメールクライアントなどのインターネット環境からも簡単に利用できるように軽量、簡素化したオープンで柔軟かつ高速なクライアントサーバープロトコルです。LDAP ディレクトリサービスを利用することで、ネットワーク上に分散している情報や資源を統合し、効率よく管理/利用することができます。
ディレクトリサービスの当初の目的は、企業や組織における個人情報を効率よく管理することでした。例えば、社員の氏名、電話番号、住所、メールアドレスといった個人情報を LDAP サーバーで管理し、ネットワーク上でこれらの情報を検索するという単純なものです。最近では、ネットワークに複数存在するサーバーのユーザー認証を LDAP ディレクトリサーバーへ任せることにより、今までは各サーバーごとに管理していたこれらのログイン情報を一元管理する目的としても利用されています。
LDAP の設計思想は非常に柔軟なため、個人情報や顧客情報の管理だけでなく、その特性を生かした様々な分野への応用が期待できます。例えば、ディレクトリサービスは、テキストだけでなく、画像や音声といったマルチメディアデータ等を扱うこともできるため、ネットワーク上のマルチメディアコンテンツを管理するサーバーとしても利用可能です。

LDAP のディレクトリサービスに格納される情報は、エントリを基にしています。
エントリとは、識別名 (Distinguished Name: DN)というグローバルに一意な名前を持った属性の集まりです。DN はエントリを一意に参照するために使われます。
エントリが持つ属性にはそれぞれ型と一つ以上の 値があります。型にはたいてい憶えやすい名前がついています。たとえば一般名(common name)には "cn"、電子メールアドレス (email address)には "mail" という名前がついています。値のシンタックスは属性型に依存します。たとえば属性 cn は Babs Jensen という値を保有できますし、属性 mail は "babs@example.com" という値を保有できます。属性 jpegPhoto は、JPEG (バイナリ)フォーマットで画像を保有します。

LDAP においてディレクトリのエントリは、階層ツリー構造に配置されます。伝統的に、この階層ツリーには地理、組織などの境界が反映されます。ツリーの最上位には国を表すエントリがあり、その下には全国的な組織を表すエントリがあり、さらにその下には組織単位、人、プリンタ、文書など、考えられるほとんどのものを表すエントリを置きます。伝統的な命名法を使った LDAP ディレクトリツリーの例を図1.1に示します。


b. LDAPコマンド

openldap-client パッケージには、複数のLDAP クライアントプログラムが含まれています。これらのツールを使用することで、LDAP サーバー内に存在するデータを検索、追加、修正、削除などを行うことが可能になります。

  • ldapsearch --- データ検索
  • ldapadd --- データ追加
  • ldapmodify --- データ更新
  • ldapdelete --- データ削除
  • ldappasswd --- データのパスワード変更
  • ldapmodrdn --- データ名の変更

1.データ検索

LDAPサーバー内のデータを検索するには、ldapsearc コマンドを使います。

● ldapsearch のオプション(一部)
パラメータ 用途
-? ldapsearch の使用方法についてのヘルプを表示します。
-a deref 別名の非参照を指定します。never、always、search、find のいずれかを入力します。このパラメータを省略した場合は、デフォルトの never が適用されます。
-A 属性の値ではなく、属性名のみを検索します。
-b base dn 検索の開始位置になる識別名を指定します。値の指定には引用符を使用します (たとえば、"ou=West,o=Acme,c=US")。

検索するサーバーで検索ベースを指定する必要がある場合は、このパラメータを使用します。それ以外の場合は、省略可能です。

必要に応じて、-b と -s を併用して検索範囲を指定できます。-s、-b を省略すると、起点として指定されたエントリとそのエントリのすべての下位エントリが検索されます。

-B ASCII 形式ではない値の出力を可能にします。
-D bind dn サーバーがユーザーの認証に使用する識別名を指定します。名前は、ディレクトリ内のエントリに対応しており、ディレクトリの検索に必要なアクセス権が設定されている必要があります。

名前は引用符で囲んで指定します (たとえば、"cn=Directory Manager,o=Acme,c=US")。

このパラメータを省略すると、匿名でサーバーに接続されます。サーバーへの匿名接続が許可されていない場合は、-D を使用します。

識別名に対応するパスワードを指定する場合は、-D とともに -w パラメータを使用します。

-f file 使用する検索フィルタを含むファイルを指定します (たとえば、-f filters)。1 行ごとに各検索フィルタを配置します。ldapsearch は 1 行につき 1 回の検索を実行します。必要に応じて、フィルタパターンを指定します。たとえば、-f filters "cn=%s" と指定し、ファイルの各行に共通名の値を入力します。
-F sep 属性名と属性値の間に、等号 (=) ではなく sep を表示します。たとえば、ldapsearch 出力を読み込むツールが別の区切り文字を想定している場合に、このパラメータを使用します。
-h host name 接続先のサーバーのホスト名を指定します (たとえば、-h server.acme.com)。
-l timelimit 検索を完了するまでの時間の上限を秒単位で指定します。このパラメータを指定しないか、限度 0 を指定した場合、検索には無限の時間を要する可能性があります。ただし、ldapsearch はサーバー上で設定された検索制限時間を超えて待機することはありません。
-L LDIF フォーマットで出力するよう指定します。LDIF フォーマットでは、属性の区切りとして、等号 (=) ではなくコロン (:) を使用します。LDIF は、多数のディレクトリエントリを一度に追加または変更するときに便利です。たとえば、LDIF フォーマットを使用すると、結果の内容を LDAP 準拠のディレクトリにインポートできます。
● 単一の(-L)の場合は、LDIFv1 で出力
● 2個の(-LL)を指定するとコメントを出力しない
● 3個の(-L)を指定すると LDIF バージョンを出力しない
-M 参照先オブジェクトを通常のエントリとして管理します。これにより、ldapsearch の返す属性が、参照されるエントリの属性ではなく、参照先エントリ自体の属性になります。
-n 検索方法を表示しますが、実際には検索を実行しません。
-p port サーバーが使用するポートを指定します。このパラメータを省略すると、ポート 389 が使用されます。
-R サーバーから返される検索リファレンスに自動追従しません。
-s scope -b パラメータを使用する場合の検索範囲を指定します。
● base を指定すると、-b パラメータで指定したエントリのみが検索されます。(ベースオブジェクト検索)
● one を指定すると、-b パラメータで指定したエントリのすぐ下位にあるエントリのみが検索されます。指定したエントリそのものは検索されません。(1レベル検索)
● sub を指定すると、-b パラメータで指定したエントリとその下位のエントリすべてが検索されます。これは、-s を使用せずに -b を指定した場合のデフォルトの動作です。(サブツリー検索)
● children を指定すると、ベースオブジェクト以下全てを検索。但し、指定したDNを持つエントリは検索しない。※スコープ children は、LDAPv3 の機能拡張を必要とします。(子エントリ検索)
-b と -s はどちらを先に指定してもかまいません。
-S attribute 指定した属性で結果をソートします。
-z sizelimit 返されるエントリの最大数を指定します。このパラメータを省略するか、0 を指定すると、ldapsearch で返されるエントリの数には制限がなくなります。ただし、サーバーで設定されている数よりも多くなることはありません。
-u ldapsearch から返される識別名を、わかりやすい形式にするように指定します。
-v ldapsearch で詳細情報が表示されるように指定します。
-w password -D パラメータで使用される識別名に対応するパスワードを指定します。
-x -S とともに使用して、LDAP サーバーが結果をソートしてから返すように指定します。-S のみを使用すると、ldapsearch によって結果がソートされます。

(1)一般的な検索

dc=example,dc=comを基点として、objectclass=*のフィルタに合致するエントリを最階層まで検索する

# ldapsearch -b dc=example,dc=com -h localhost -p 389 -D "cn=directory manager" -w - -s sub objectclass=*
Enter bind password:
dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example

dn: ou=Groups, dc=example,dc=com
objectClass: top
objectClass: organizationalunit
ou: Groups

dn: cn=Directory Administrators, ou=Groups, dc=example,dc=com
cn: Directory Administrators
objectClass: top
objectClass: groupofuniquenames
ou: Groups
uniqueMember: uid=kvaughan, ou=People, dc=example,dc=com
uniqueMember: uid=rdaugherty, ou=People, dc=example,dc=com
uniqueMember: uid=hmiller, ou=People, dc=example,dc=com

dn: ou=People, dc=example,dc=com
objectClass: top
objectClass: organizationalunit
ou: People
:
(省略)

(2)属性値に一致するエントリを表示する(uid=bassimane)
# ldapsearch -b dc=example,dc=com -h localhost -p 389 -D "cn=directory manager" -w - -s sub uid=bassimane
Enter bind password:
version: 1
dn: uid=bassimane, ou=People, dc=example,dc=com
cn: Blog Assimane
sn: Assimane
givenName: Blog
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
ou: Product Development
ou: People
l: Sunnyvale
uid: bassimane
mail: bassimane@example.com
telephoneNumber: +1 408 555 1111
facsimileTelephoneNumber: +1 408 555 2222
userPassword: {SSHA}mY+g7ibootFnEoDCuQQrZ3Gye4/8XJldHwn/Ww==
roomNumber: 3333


(3)属性値に一致するエントリで表示する属性を指定する(cn sn)
# ldapsearch -b dc=example,dc=com -h localhost -p 389 -D "cn=directory manager" -w - -s sub l=Sunnyvale cn sn
Enter bind password:
version: 1
dn: uid=scarter, ou=People, dc=example,dc=com
cn: Sam Carter
sn: Carter

dn: uid=kvaughan, ou=People, dc=example,dc=com
cn: Kirsten Vaughan
sn: Vaughan

dn: uid=dmiller, ou=People, dc=example,dc=com
cn: David Miller
sn: Miller
:
(省略)


2.属性の変更・削除


3.エントリの追加

ディレクトリのエントリを追加するには、ldapadd コマンドを使用します。
ldapmodifyコマンドは文字通りエントリを編集するために使われますが、-aオプションを使用することで次のようにldapaddコマンド同様、エントリの追加を行うことも可能です。


4.エントリの削除

ディレクトリのエントリを削除するには、ldapdelete コマンドを使用します。

# ldapdelete -h localhost -p 389 -D "cn=directory manager" -w - "uid=bassimane, ou=People, dc=example,dc=com"
Enter bind password:


5.LDAPサーバーへのデータの追加


6.LDAPサーバーへのデータの追加


7.LDAPサーバーのパスワードの変更


z. 出題範囲概要

概要 :
  • LDIF形式および重要なアクセス制御に関する知識も含め、基本的なOpenLDAPサーバーを設定する。

詳細 :
  • OpenLDAP slapadd, slapcat, slapindex, slapd, /var/lib/ldap/
  • ディレクトリベースの設定
    slapd-config
  • アクセス管理
    slapd.access
  • 識別名 (DN)
  • LDIF
  • ディレクトリ
  • エントリの操作
  • スキーマ
    オブジェクト ID、属性、クラス
  • ホワイトページ

  [ 例題 ] 


         

    www.it-shikaku.jp